package com.tool.cn.algorithm.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

import com.tool.cn.algorithm.proxy.handler.ProxyHandler;
import com.tool.cn.algorithm.proxy.impl.Hello;
import com.tool.cn.algorithm.proxy.impl.HelloInterface;
import com.tool.cn.algorithm.proxy.impl.Word;
import com.tool.cn.algorithm.proxy.impl.WordInterface;

/**
 * 
 * @author wangzonghui
 * @date 2021年12月30日 上午10:41:16 
 * @Description 动态代理实现 参考博客 https://www.jianshu.com/p/9bcac608c714
 */
public class ProxyMain {
	
	public static void main(String[] args) {
		//添加如下设置会保存class
//        System.getProperties().setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");  //jdk8 动态class保存到本地   新版本 System.getProperties().put("jdk.proxy.ProxyGenerator.saveGeneratedFiles", "true");

        HelloInterface hello = new Hello();
        
        InvocationHandler handler = new ProxyHandler(hello);
        HelloInterface proxyHello = (HelloInterface) Proxy.newProxyInstance(hello.getClass().getClassLoader(), hello.getClass().getInterfaces(), handler);
        proxyHello.sayHello();
        
        System.out.println("===========接口二============");
        WordInterface word=new Word();
        handler = new ProxyHandler(word);
        WordInterface wordSay = (WordInterface) Proxy.newProxyInstance(word.getClass().getClassLoader(), word.getClass().getInterfaces(), handler);
        wordSay.word();
        
    }

}
